François HU - ENSAE - 14/04/20 - https://curiousml.github.io/
from jyquickhelper import add_notebook_menu
add_notebook_menu()
Quelques motivations :
vect(king) - vect(man) + vect(woman) = vect(queen)
représenter numériquement des thèmes (topics) cachés et les documents :
$\color{grey}{\text{*cacher le code}}$
from IPython.display import HTML, Image
HTML('''<script>code_show=true; function code_toggle() {if (code_show){$('div.input').hide();} else {$('div.input').show();}code_show = !code_show} $( document ).ready(code_toggle);</script><form action="javascript:code_toggle()"><input type="submit" value="cacher / afficher code"></form>''')
Image("img/vectBOW1.png", width=700, height = 200)
Image("img/vectBOW2.png", width=750, height = 200)
Image("img/vectBOW3.png", width=750, height = 200)
remarques :
solution : approche word embedding
$\color{#228B22}{\text{word embedding}}$ (plongement de mots en français) : vectorisation des mots de sorte que les mots apparaissant dans des contextes similaires ont des significations apparentées
Image("img/vectWE.png", width=700, height = 200)
display(Image("img/context_word.gif.png", width=500, height = 200))
Introduction au CBOW
display(Image("img/CBOW_1.png", width=500, height = 200))
CBOW
display(Image("img/CBOW_2.png", width=700, height = 200))
Introduction au skip-gram
Image("img/SG_1.png", width=500, height = 200)
Skip-gram
Image("img/SG_2.png", width=700, height = 200)
Skip-gram : un peu de mathématiques
$\color{#228B22}{\text{Softmax hierarchique}}$ :
$\color{#228B22}{\text{Negative sampling}}$ :
http://mediamining.univ-lyon2.fr/people/guille/word_embedding/skip_gram_with_negative_sampling.html
agrégation puis classification classique :
Image("img/doc_som_moy.png", width=650, height = 200)
Image("img/doc_som_moypond.png", width=700, height = 200)
doc2vec puis classification classique : voir $\color{red}{\text{section suivante}}$ pour le modèle doc2vec
classification avec les réseaux de neurones : voir $\color{red}{\text{cours 2}}$ pour les modèles séquentiels
vectorisation des documents (resp. des mots) de sorte que les documents (resp. les mots) apparaissant dans des contextes similaires ont des significations apparentées
$\color{#228B22}{\text{Distributed Memory (DM)}}$ :
$$p(w_i\ | \ w_{i-h}, \dots, w_{i+h}, d)$$Image("img/DM.png", width=700, height = 200)
$\color{#228B22}{\text{Distributed Bag-Of-Words (DBOW)}}$ :
$$p(w_{i-h}, \dots, w_{i+h} \ | \ d)$$Image("img/DBOW.png", width=700, height = 200)
Résumé
Image("img/cartoon_w2v.png", width=580, height = 200)
auteur : Dmitry Malkov, data scientist et dessinateur de BD chez Data Monsters
$\color{grey}{\text{*cacher le code}}$
from IPython.display import HTML, Image
HTML('''<script>code_show=true; function code_toggle() {if (code_show){$('div.input').hide();} else {$('div.input').show();}code_show = !code_show} $( document ).ready(code_toggle);</script><form action="javascript:code_toggle()"><input type="submit" value="cacher / afficher code"></form>''')
hypothèses :
Image("img/TM.png", width=350, height = 200)
topic models les plus populaires : LSA, PLSA, LDA
Image("img/LSA_schema.png", width=700, height = 200)
1. encodage en une matrice A
2. factorisation de la matrice A par SVD tronquée
Image("img/SVD.png", width=480, height = 200)
Image("img/SVDt.png", width=480, height = 200)
Comment choisir $\tilde{U}_t$ et $\tilde{V}_t^T$ ?
Image("img/SVDt2.png", width=410, height = 200)
Image("img/SVDt1.png", width=410, height = 200)
Remarques :
approche algèbre linéaire
évaluer la similarité entre les documents (similarité cosinus)
évaluer la similarité entre les mots (similarité cosinus)
désavantages :
vecteurs difficilement interpretable
besoin d'un grand ensemble de docs et de vocabulaires pour obtenir une bonne précision
Idée : trouver un modèle probabiliste avec des topics latent qui peut générer les observations du matrice mots-docs
Image("img/topic_generated.png", width=600, height = 200)
Par David Blei, Probabilistic topic models, 2012
Formellement :
Input : collection de textes bag-of-words :
$$n_{wd} = \text{ nombre d'occurence du mot } w \text{ dans le document } d $$Trouver : probabilité que le mot $w$ soit dans un topic $t$ :
$$\phi_{wt} = p(w|t)$$probabilité que le topic $t$ soit dans le document $d$ :
$$\theta_{td} = p(t|d)$$comment est généré un document $d$ d'après le modèle $\color{red}{\text{PLSA}}$ ?
un document $d = (w_1, \dots, w_W)$ est généré de la manière suivante : pour tout $w \in d$
modèle graphique associé au PLSA :
Image("img/PLSA_GM.png", width=400, height = 200)
écriture probabiliste
écriture matricielle
Image("img/PLSA.png", width=500, height = 200)
PLSA $\approx$ aspect probabiliste de LSA
Entraînement du modèle PLSA
posons $\Theta = [\cdots\theta_{ij}\cdots]$ et $\Phi = [\cdots\phi_{ij}\cdots]$
problème : $\color{red}{\log\sum_t}$ dur à maximiser
solution : algorithme EM - https://fr.wikipedia.org/wiki/Algorithme_esp%C3%A9rance-maximisation
PLSA : topic modeling basé sur une inférence fréquentiste : $\phi_t = (\phi_{wt})_{w\in W}$ et $\theta_d = (\theta_{td})_{t\in T}$ sont des variables déterministes
$\color{#228B22}{\text{LDA}}$ : topic modeling basé sur une inférence bayésienne : $\phi_t = (\phi_{wt})_{w\in W}$ et $\theta_d = (\theta_{td})_{t\in T}$ sont des variables aléatoires latentes de la distributions Dirichlet :
LDA $\approx$ extension du PLSA
Plusieurs densités de la loi de Dirichlet lorsque K = 2 (loi bêta)
Image("img/Beta_distribution.png", width=500, height = 200)
Plusieurs images de la densité de la loi de Dirichlet lorsque K = 3
Image("img/Dirichlet_distributions.png", width=500, height = 200)
comment est généré un document $d$ d'après le modèle $\color{red}{\text{LDA}}$ ?
un document $d = (w_1, \dots, w_W)$ est généré de la manière suivante : pour tout $w \in d$
modèle graphique associé au LDA :
Image("img/LDA_GM.png", width=500, height = 200)
Résumé :
topic modeling
topic models :
TP sur le topic modeling